跳到主要内容

Julia 模块

阐述

模块是构建功能和包的基本单元。模块尽可能使用大驼峰命名,必要时采用复数形式。模块可以用于命名空间管理:

  • 每个模块是一个新的全局作用域
  • 模块通过 export 导出名称,用户代码通过 usingimport 导入名称

每个名称都来自于一个模块,带有完整模块名的名称称为 qualified name,如 Base.Math.sin;使用这一方式可以访问模块中的任意名称,甚至包括那些未导出的,也可以为它增加方法。

模块的使用

独立的 usingimport

前者将模块名和所有 export 的名称导入当前命名空间,而后者只导入模块名。

带标识符的 usingimport

将特定的名称导入当前命名空间(不包括模块名,也不考虑 export)。两者的区别是后者允许不带模块名的情况下扩展方法。

重命名 as

using A: a as aa 以及 import A: a as aa 可以重命名一个标识符,但重命名模块只能通过 import A as AA 来完成。

相对路径导入

例如,在模块中引用子模块时,需要使用:

module Parent
using .Utils
end

子模块

子模块可以用于在模块中进一步划分功能,此时最好使用相对路径来导入。

实例

标准模块

  • Core 是语言核心功能
  • Base 是一些基本的定义
  • Main 是当前的顶层模块

定义新的模块时,默认会包含 BaseCore 中的功能;如果不需要 Base,可以使用 baremodule

baremodule Mod

using Base

eval(x) = Core.eval(Mod, x)
include(p) = Base.include(Mod, p)

...

end

性质

相关内容

参考文献